﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;

namespace NAVE_Alice_demo.Cena08.Cena.Camada
{
    /// <summary>
    /// /// Classe de camada
    /// </summary>
    class Camada3 : Camada
    {
        #region Variáveis
        /// <summary>
        /// Um objeto 'nuvens' para acompanhar esta camada
        /// </summary>
        private Objeto.Nuvens nuvens;

        private bool bln_efeitoNuvemTocado = false;

        #endregion

        #region Construtor
        /// <summary>
        /// Construtor da classe
        /// </summary>
        /// <param name="Content">Carregar recursos do content</param>
        public Camada3(ContentManager Content)
        {
            this.t2d_imagem = Content.Load<Texture2D>("Cena08//Cena//Camada3//Camada3");
            this.v2d_posicaoQuadroImagem = new Vector2(0, 0);
            this.v2d_tamanhoQuadroImagem = new Vector2(1024, 768);
            this.flt_velocidadeParalaxeMaxima = 1f;
            this.flt_velocidadeParalaxeAtual = 0;

            this.nuvens = new Objeto.Nuvens(Content);
        }

        #endregion

        #region Métodos
        /// <summary>
        /// Atualizar posição e métodos da camada
        /// </summary>
        /// <param name="gameTime">Tempo de jogo real</param>
        /// <param name="mouse">Estado do mouse</param>
        public override void Update(GameTime gameTime, MouseState mouse)
        {
            //Deixe que a classe pai faça o que a filha não precisa...
            base.Update(gameTime, mouse);

            //Atualize a posição do objeto 'nuvens' com a velocidade atual sempre inversa, pois a nuvem se move em direção contrária
            //do quadro de corte da imagem de fundo
            nuvens.AtualizandoPosicao(flt_velocidadeParalaxeAtual*-1);
            
            //Se o objeto 'nuvens' for tocado...
            if (nuvens.Tocado(mouse))
            {
                //Se o som não foi tocado, toque e anuncie que já tocou...
                if (!bln_efeitoNuvemTocado)
                {
                    nuvens.TocarEfeito();
                    bln_efeitoNuvemTocado = true;
                }
                nuvens.Anime(gameTime);//... Anime
            }
            //Senão...
            else
            {
                //Se quiser que o som das nuvens toque toda vez que passa o mouse em cima, é só descomentar a linha abaixo
                //bln_efeitoNuvemTocado = false;

                nuvens.frameAtual = 0;//... mude o frame de animação para o primeiro
            }
        }
        
        /// <summary>
        /// Desenhe
        /// </summary>
        /// <param name="spriteBatch">Desenhar na tela de jogo</param>
        public override void Draw(SpriteBatch spriteBatch)
        {
            //Deixe que a classe pai faça o que a filha não precisa...
            base.Draw(spriteBatch);

            //Desenhe o objeto 'nuvens'
            nuvens.Draw(spriteBatch);
        }

        #endregion
    }
}
